home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48hor1
/
circuit.src
< prev
next >
Wrap
Text File
|
1990-10-17
|
4KB
|
142 lines
%%HP: T(3)A(D)F(.);
@ by Tony Duell
DIR
DEMO { { "CLK" 5 5 M }
{ "CLK" 10 10 N }
{ "CLK" 20 20 P }
{ "FADD" M N P S C } }
FADD { { A B CIN SUM COUT }
{ { "HADD" A B S1 C1 } { "HADD" CIN S1 SUM C2 } { "OR" C1 C2 COUT } } }
HADD { { A B SUM CARRY } { { "XOR" A B SUM } { "AND" A B CARRY } } }
SIM
\<< INIT TITLE 1 SWAP
FOR j NXTSTATE 1 OUT.L SIZE
FOR i OUT.L i GET NAME.L SWAP POS STATE SWAP GET -4 * 6 + i 1 - 8 *
+ R\->B j 29 + R\->B SWAP 2 \->LIST PIXON
NEXT
NEXT 7 FREEZE 0 WAIT DROP TEXT
\>>
ALL
\<< NAME.L NODES
\>>
NODES
\<< 'OUT.L' STO
\>>
COMPILE
\<< NEWC RCL DUP SIZE \-> cir siz
\<< 1 siz
FOR i cir i GET COMGATE
NEXT
\>>
\>>
MUX4 { { A B C D SA SB Y }
{ { "MUX" SA A B YA } { "MUX" SA C D YB } { "MUX" SB YA YB Y } } }
MUX { { SEL A B Y }
{ { "NOT" SEL NS }
{ "AND" A NS YA }
{ "AND" B SEL YB }
{ "OR" YA YB Y } } }
MACCNT 3
TITLE
\<< ERASE { # 1Eh # 0h } { # 1Eh # 3Fh } LINE OUT.L SIZE 8 MIN 1 SWAP
FOR i OUT.L i GET \->STR DUP SIZE 1 - 2 SWAP SUB DUP SIZE 5 MIN 1 SWAP
SUB 2 \->GROB i 1 - 8 * R\->B # 0h SWAP 2 \->LIST SWAP PICT 3
ROLLD GOR
NEXT { # 0h # 0h } PVIEW
\>>
PPAR { (-6.5,-3.1) (6.5,3.2) X 0 (0,0) FUNCTION Y }
OUT.L { M N P S C }
NXTSTATE
\<< 1 CIRCUIT.L SIZE
FOR i CIRCUIT.L i GET DUP 1 GET "D" SWAP + OBJ\->
NEXT 'STATE.CNT' INCR DROP STATE.NEW 'STATE' STO
\>>
TMP { { "CLK" 5 5 R } { "CLK" 10 10 Q } { "CLK" 20 20 P } { "MUX" P Q R S } }
STATE { 1 1 0 0 1 0 0 1 }
DCLK
\<< DUP DUP 2 GET SWAP 3 GET \-> n m
\<< STATE.CNT n m + MOD n \>= SWAP 4 GET SWAP STATE.NEW 3 ROLLD PUT
'STATE.NEW' STO
\>>
\>>
DLO
\<< 2 GET 'STATE.NEW' SWAP 0 PUT
\>>
DHI
\<< 2 GET 'STATE.NEW' SWAP 1 PUT
\>>
DXOR
\<< DUP 2 GET STATE SWAP GET OVER 3 GET STATE SWAP GET XOR SWAP 4 GET
STATE.NEW 3 ROLLD SWAP PUT 'STATE.NEW' STO
\>>
DOR
\<< DUP 2 GET STATE SWAP GET OVER 3 GET STATE SWAP GET OR SWAP 4 GET
STATE.NEW 3 ROLLD SWAP PUT 'STATE.NEW' STO
\>>
DAND
\<< DUP 2 GET STATE SWAP GET OVER 3 GET STATE SWAP GET AND SWAP 4 GET
STATE.NEW 3 ROLLD SWAP PUT 'STATE.NEW' STO
\>>
DNOT
\<< DUP 2 GET STATE SWAP GET NOT SWAP 3 GET STATE.NEW 3 ROLLD SWAP PUT
'STATE.NEW' STO
\>>
DBUF
\<< DUP 2 GET STATE SWAP GET SWAP 3 GET STATE.NEW 3 ROLLD SWAP PUT
'STATE.NEW' STO
\>>
STATE.CNT 100
STATE.NEW { 1 1 0 0 1 0 0 1 }
INIT
\<< NAME.L SIZE CLIST DUP 'STATE' STO 'STATE.NEW' STO 0 'STATE.CNT' STO
\>>
COMGATE
\<< DUP SIZE OVER 1 GET PRIM OVER POS
IF 0 ==
THEN MACRO
ELSE 1 \->LIST SWAP 2 SWAP
FOR i OVER i GET DUP TYPE
IF 6 ==
THEN ADDNAME
END 1 \->LIST +
NEXT SWAP DROP 1 \->LIST CIRCUIT.L SWAP + 'CIRCUIT.L' STO
END
\>>
ADDNAME
\<< NAME.L OVER POS DUP
IF 0 ==
THEN DROP NAME.L SWAP + DUP 'NAME.L' STO SIZE
ELSE SWAP DROP
END
\>>
NEWC
\<< { } DUP 'CIRCUIT.L' STO 'NAME.L' STO 0 'MACCNT' STO
\>>
CIRCUIT.L { { "CLK" 5 5 1 } { "CLK" 10 10 2 } { "CLK" 20 20 3 }
{ "XOR" 1 2 4 } { "AND" 1 2 5 } { "XOR" 3 4 6 } { "AND" 3 4 7 }
{ "OR" 5 7 8 } }
NAME.L { M N P S1.1 C1.1 S C2.1 C }
MACRO
\<< DROP DROP OBJ\-> 1 - \->LIST 'MACCNT' INCR \-> arglist locmac
\<< OBJ\-> OBJ\-> DROP \-> extrn circ
\<< 1 circ SIZE
FOR i circ i GET 2 OVER SIZE
FOR j DUP j GET DUP TYPE
IF 6 ==
THEN extrn OVER POS IF 0 == THEN \->STR 1 OVER SIZE 1 - SUB "." +
locmac \->STR + "'" + OBJ\-> j SWAP PUT ELSE extrn SWAP POS
arglist SWAP GET j SWAP PUT END
END
NEXT COMGATE
NEXT
\>>
\>>
\>>
PRIM { "AND" "OR" "XOR" "NOT" "BUF" "HI" "LO" "CLK" }
CLIST
\<< { } SWAP 1 SWAP
START { 0 } +
NEXT
\>>
END